#include "AVector.h"


AVector::AVector(void)
{
	x = 0;
	y = 0;
}

AVector::AVector(float in_x, float in_y)
{
	x = in_x;
	y = in_y;
}



AVector::~AVector(void)
{
}

// vector addition
AVector AVector::operator+ (AVector otherVec) {
	return AVector(x+otherVec.x, y+otherVec.y);
}

// Vector subtraction
AVector AVector::operator- (AVector otherVec) {
	return AVector(x-otherVec.x, y-otherVec.y);
}

// Scalar multiplication on this vector
AVector AVector::operator* (float scalar) {
	return AVector(x*scalar, y*scalar);
}

// Scalar division on this vector
AVector AVector::operator/ (float scalar) {
	return AVector(x/scalar, y/scalar);
}

float AVector::dot(AVector inVec) {
	return (x*inVec.x) + (y*inVec.y);
}

float AVector::cross(AVector inVec)
{
	return x*inVec.y - y*inVec.x;
}

float AVector::length(void) {return sqrt((x*x)+(y*y));}

AVector AVector::normalize(void) {
	float length = this->length();
	if (length == 0) return AVector(0,0);
	else return (*this)/this->length();
}

float AVector::getDirection(void) {

	/*
	float angle;

	if (y == 0) {
		if (x == 0) angle = 0;
		else if (x > 0) angle = 90;
		else angle = 270;
	}
	else {
		angle = abs(degatan(x/y));
		if (x > 0 && y < 0) angle = 180 - angle;
		else if (x < 0) {
			if (y < 0) angle += 180;
			else angle = 360 - angle;
		}
	}

	return angle;
	*/
	AVector v = this->normalize();
	float angle = degacos(v.dot(AVector(0, 1)));
	
	if (v.cross(AVector(0, 1)) > 0)
	{
		return angle;
	}
	else
	{
		return -angle;
	}
}